home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Power Programmierung
/
Power-Programmierung (Tewi)(1994).iso
/
assemblr
/
library
/
lib4a86
/
lib
/
squeue.lib
< prev
next >
Wrap
Text File
|
1992-02-02
|
3KB
|
198 lines
#IF !LIB4A86
#ELSE
#IF !INTERN_LIB4A86_S
INTERN_LIB4A86_S EQU 01
JMP START
#ENDIF
#ENDIF
SQUEUEHEADER STRUC
SQUEUELENGTH DW ?
SQUEUEFREE DW ?
SQUEUEUSED DW ?
SQUEUEIPTR DW ?
SQUEUEOPTR DW ?
SQUEUESEM DB ?
SQUEUEDUMMY DB ?
SQUEUEUSERDATA1 DW ?
SQUEUEUSERDATA2 DW ?
ENDS
SQUEUEHEADERLENGTH EQU (TYPE SQUEUEHEADER)
FIRSTSQUEUEENTRY EQU TYPE ( SQUEUEHEADER)
MINSQUEUE EQU 256XD
SETSQUEUESEMAPHOR EQU 0FFH
FREESQUEUESEMAPHOR EQU 000H
SQUEUEISEMPTY EQU 08301H
SQUEUEISFULL EQU 08302H
SQUEUELENGTHERROR EQU 08303H
SQUEUEAKTIVERROR EQU 083FFH
SQUEUESEG DW 0
INTERN_CHECKSQUEUESEMAPHOR MACRO
MOV AX,SQUEUEAKTIVERROR
XCHG ES:SQUEUESEM,AL
CMP AL,FREESQUEUESEMAPHOR
JE >M1
STC
RET
M1:
#EM
INTERN_FREESQUEUESEMAPHOR MACRO
MOV ES:SQUEUESEM,FREESQUEUESEMAPHOR
#EM
INITSQUEUE:
CMP CX,MINSQUEUE
JAE >L1
MOV AX,SQUEUELENGTHERROR
STC
RET
L1:
MOV CS:SQUEUESEG,ES
MOV ES:SQUEUESEM,SETSQUEUESEMAPHOR
MOV ES:SQUEUELENGTH,CX
INTERN_DELETESQUEUE:
SUB CX,SQUEUEHEADERLENGTH
MOV ES:SQUEUEFREE,CX
MOV AX,FIRSTSQUEUEENTRY
MOV ES:SQUEUEIPTR,AX
MOV ES:SQUEUEOPTR,AX
XOR AX,AX
MOV ES:SQUEUEUSED,AX
INTERN_FREESQUEUESEMAPHOR
RET
DELETESQUEUE_A:
MOV ES,CS:SQUEUESEG
DELETESQUEUE:
INTERN_CHECKSQUEUESEMAPHOR
MOV CX,ES:SQUEUELENGTH
JMP SHORT INTERN_DELETESQUEUE
LOCKSQUEUE_A:
MOV ES,CS:SQUEUESEG
LOCKSQUEUE:
INTERN_CHECKSQUEUESEMAPHOR
RET
UNLOCKSQUEUE_A:
MOV ES,CS:SQUEUESEG
UNLOCKSQUEUE:
INTERN_FREESQUEUESEMAPHOR
RET
GETSQUEUESTATISTIK_A:
MOV ES,CS:SQUEUESEG
GETSQUEUESTATISTIK:
INTERN_CHECKSQUEUESEMAPHOR
MOV DX,ES:SQUEUELENGTH
SUB DX,SQUEUEHEADERLENGTH
MOV CX,ES:SQUEUEFREE
MOV AX,ES:SQUEUEUSED
INTERN_FREESQUEUESEMAPHOR
RET
WRITESQUEUE_A:
MOV ES, CS:SQUEUESEG
WRITESQUEUE:
CLD
INTERN_CHECKSQUEUESEMAPHOR
PUSH DI,SI,CX
MOV AX,ES:SQUEUEFREE
CMP CX,AX
JBE >L1
POP CX
PUSH AX
MOV AX,SQUEUEISFULL
JMP >L8
L1:
SUB ES:SQUEUEFREE,CX
ADD ES:SQUEUEUSED,CX
MOV AX,ES:SQUEUELENGTH
MOV DI,ES:SQUEUEIPTR
SUB AX,DI
CMP AX,CX
JAE >L1
SUB CX,AX
XCHG CX,AX
REP MOVSB
MOV CX,AX
MOV DI,FIRSTSQUEUEENTRY
L1:
REP MOVSB
CMP DI,ES:SQUEUELENGTH
IF A MOV DI,FIRSTSQUEUEENTRY
MOV ES:SQUEUEIPTR,DI
CLC
JMP >L9
L8:
STC
L9:
POP CX,SI,DI
INTERN_FREESQUEUESEMAPHOR
RET
READSQUEUE_A:
MOV ES, CS:SQUEUESEG
READSQUEUE:
CLD
JCXZ RET
INTERN_CHECKSQUEUESEMAPHOR
PUSH ES,DS,DI,SI,DX
XCHG ES,DS
MOV DI,SQUEUEOPTR
XCHG DI,SI
MOV AX,SQUEUEISEMPTY
CMP SQUEUEUSED,0
JE >L8
L1:
CMP SQUEUEUSED,CX
IF B MOV CX,SQUEUEUSED
SUB SQUEUEUSED,CX
ADD SQUEUEFREE,CX
MOV DX,CX
MOV AX,SQUEUELENGTH
SUB AX,SI
CMP AX,CX
JAE >L1
SUB CX,AX
XCHG CX,AX
REP MOVSB
MOV CX,AX
MOV SI,FIRSTSQUEUEENTRY
L1:
REP MOVSB
CMP SI,SQUEUELENGTH
IF A MOV SI,FIRSTSQUEUEENTRY
MOV SQUEUEOPTR,SI
MOV CX,DX
CLC
JMP >L9
L8:
STC
L9:
POP DX,SI,DI,DS,ES
INTERN_FREESQUEUESEMAPHOR
RET
#IF !INTERN_CMARK0
INTERN_CMARK0 EQU 01H
INTERN_CMARK1:
PUSH BP
MOV BP,SP
MOV BX,06H
SUB CH,[BP+SI]
SUB AH,[BX+SI]
DEC SP
DEC CX
INC DX
XOR AL,041H
CMP B[02820H],DH
INC BX
SUB W[BX+SI],SP
INC DX
CS AND B[BP+DI+043H],DL
DEC AX
INC BP
DEC BP
DEC BP
INC BP
PUSH DX
AND B[BP+SI],CH
SUB CH,[BP+SI]
POP DX
MOV SP,BP
POP BP
RET
#ENDIF